﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TicketsPhone.Domain.Access;
using TicketsPhone.Domain.Entities;

namespace TicketsPhone.Domain.Concrete
{
    public class LogTransaccionRepositorio : ConexionSql<LogTransaccion>
    {
        
        public void GuardarLog(LogTransaccion log)
        {
            CrearComando("spLogTransaccion_Crear");
            AgregarParametro("@Modulo", log.Modulo, System.Data.ParameterDirection.Input, System.Data.DbType.String);
            AgregarParametro("@IdUsuario", log.IdUsuario, System.Data.ParameterDirection.Input, System.Data.DbType.Int32);
            AgregarParametro("@Fecha", log.Fecha, System.Data.ParameterDirection.Input, System.Data.DbType.DateTime);
            AgregarParametro("@Transaccion", ObtenerXmlObjeto(log.Objeto), System.Data.ParameterDirection.Input, System.Data.DbType.String);
            AgregarParametro("@Accion", log.Accion, System.Data.ParameterDirection.Input, System.Data.DbType.Int32);
            ExecuteNonQuery();
        }

        /// <summary>
        /// Serialza el objeto en un xml
        /// </summary>
        /// <param name="objeto"></param>
        /// <returns></returns>
        private string ObtenerXmlObjeto(object objeto)
        {
            StringBuilder strXml = new StringBuilder();
            foreach (System.Reflection.PropertyInfo propiedad in objeto.GetType().GetProperties())
            {
                object valor = propiedad.GetValue(objeto, null);

                if (valor != null && !string.IsNullOrEmpty(valor.ToString()) && !propiedad.Name.Equals("ErrorCarga"))
                {
                    strXml.Append(string.Format("<{0}>{1}</{0}>", propiedad.Name, valor));
                }
            }
            return strXml.ToString();
        }
    }
}
